From: Sebastian Keller Date: Mon, 3 Feb 2020 00:06:14 +0000 (+0100) Subject: texture-cache: Fix invalid reads when storing used resource scales X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~781^2^2~17 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=7287ee365103909c4c3e540a3f7958957f601435;p=gnome-shell.git texture-cache: Fix invalid reads when storing used resource scales The used_scales hash table uses g_double_hash and g_double_equal which try to read a double from the passed pointers. The pointers however were pointing to a float, leading to an invalid read. https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/974 --- diff --git a/src/st/st-texture-cache.c b/src/st/st-texture-cache.c index 01d193851..7f957bff7 100644 --- a/src/st/st-texture-cache.c +++ b/src/st/st-texture-cache.c @@ -1443,8 +1443,9 @@ st_texture_cache_load_file_sync_to_cogl_texture (StTextureCache *cache, if (policy == ST_TEXTURE_CACHE_POLICY_FOREVER) { + double resource_scale_double = resource_scale; g_hash_table_insert (cache->priv->keyed_cache, g_strdup (key), image); - g_hash_table_insert (cache->priv->used_scales, &resource_scale, &resource_scale); + g_hash_table_insert (cache->priv->used_scales, &resource_scale_double, &resource_scale_double); } } @@ -1491,10 +1492,11 @@ st_texture_cache_load_file_sync_to_cairo_surface (StTextureCache *cache, if (policy == ST_TEXTURE_CACHE_POLICY_FOREVER) { + double resource_scale_double = resource_scale; cairo_surface_reference (surface); g_hash_table_insert (cache->priv->keyed_surface_cache, g_strdup (key), surface); - g_hash_table_insert (cache->priv->used_scales, &resource_scale, &resource_scale); + g_hash_table_insert (cache->priv->used_scales, &resource_scale_double, &resource_scale_double); } } else